C#.NStar Pre-Pre-I-4
Привет, неизвестный путник! Здесь вы можете
просмотреть информацию о C#.NStar Pre-Pre-I-4. Вы можете скачать
EXE или просмотреть список изменений, скриншоты и/или видео.
Что уже проверено и работает в
дополнение к версии Pre-Pre-I-2o1:
1. Добавлены краткие записи типов list() T и Dictionary[K, V] - () T и [K, V].
2. Добавлен тип object, являющийся базовым для всех остальных типов, включая примитивные.
В отличие от C#.NET, в нашем языке он является абстрактным.
3. Добавлены свойства с ограничением присваивания - теперь вместо { get, set } можно писать
{ get, private set }, { get, init }, { get, private init } и просто { get }. Слово get обязательно.
Точка с запятой после названия метода доступа не ставится, зато ставится в конце строки со свойством,
даже если в ней нет знака "=". Также можно перед типом свойства указывать ключевое слово required,
вследствие чего транслятор выдаст ошибку, если при конструировании не присвоить значение этому свойству.
А значение присваивается так: var x = new MyClass[a, b, c, ...](...). Или так:
MyClass[a, b, c, ...] x = new(...). Да, очень похоже на полиморфизм, но это не он.
Свойства перечисляются так: сначала required с однократной установкой в порядке присваивания,
затем остальные в порядке присваивания.
4. Добавлена возможность сохранения написанной программы в автономный EXE.
К сожалению, рядом с EXE находится еще несколько файлов,
убрать их без превращения EXE в самораспаковывающийся архив не представляется возможным.
Для создания приложения из одного файла используйте либо "нормальный" архив
(распаковываемый архиватором или самораспаковывающийся), либо программы в стиле Inno Setup.
5. Добавлены циклы loop { ... } while (condition);, начинающийся как loop, но заканчивающийся,
когда условие станет равным false (но хотя бы раз обязательно выполнится,
в то время как обычный while может не выполниться ни разу), и repeat (n) while (condition)
и for (type var in collection) while (condition), заканчивающиеся или после n раз / при достижении конца коллекции,
или когда условие станет равным false.
6. Добавлена краткая запись пар "ключ/значение" - (key1: value1, key2: value2, key3: value3, ...),
с использованием одного уровня скобок, а не трех.
7. Добавлены типы long long, представляющий длинную целочисленную арифметику
(но не unsigned long long - он в разработке!), и complex, представляющий комплексное число
с действительной и мнимой частями типа real (со строчной буквы).
Присутствуют литералы этих типов - 5LL (прописными буквами), 5c
(преобразование целого или действительного числа в комплексное) (строчной буквой)
и 5I - мнимое число с указанным количеством мнимых единиц,
а также просто I (в отличие от математики, I - прописная).
8. Добавлен оператор беззнакового сдвига вправо >>>, заполняющий левые биты нулями,
а не единицами даже для отрицательных чисел.
Что уже проверено и не работает в дополнение к версии Pre-Pre-I-2o1:
1. Ключевое слово closed упразднено, примеры кода с ним больше не работают. Используйте private.
Рабочие примеры кода на C#.NStar:
Class Account
{
string Username { get, private set };
real Balance { get, init };
bool IsLocked { get, set }; // публичный set
}
var acc = new Account["user1", 100.0]();
return acc;
Class Config
{
int Timeout { get, init };
}
var c = new Config[100]();
return c;
Class Secret
{
bool IsActive { get, init };
string Code { get, private init };
Constructor(string code)
{
Code = code;
IsActive = true;
}
}
var s1 = new Secret("123");
var s2 = new Secret[true, "789"]("456");
var s3 = new Secret[false]("abc");
return (s1, s2, s3);
() int list = new();
for (int i in Chain(0, 10)) while (i * i < 10)
{
list.Add(i);
}
return list;
() int list = new();
for (int i in Chain(0, 10)) while! (i * i % 20 >= 10)
{
list.Add(i);
}
return list;
using System.Collections;
[string, int] dic = ("0": 0, "1": 1, "2": 2, "3": 3);
return (dic, dic["1"]);
return Sqrt(I);
var x = ln (-5c);
return x;
var x = 1LL;
return x << 100;
long long a = 123456789012345678901234567890;
long long b = 1000;
long long c = a + b;
long long d = a * b;
long long e = a - b;
long long f = a / b; // целочисленное деление
long long g = a % b; // остаток
bool isGreater = a > b;
bool isEqual = a == b;
long long abs = Abs(a);
long long pow_ = a pow 3;
int sign = a.Sign; // -1, 0, 1
int sign2 = (-a).Sign; // -1, 0, 1
int x = a % 2147483648;
string s = "" + a;
return (a, b, c, d, e, f, g, isGreater, isEqual, abs, pow_, sign, sign2, x, s);
long int x = -281470681808896;
var y = x >>> 16;
return y;
object obj1 = new System.Collections.Buffer[int](10);
object obj2 = "AAA";
object obj3 = 123;
return (obj1, obj2, obj3, typeof(obj1), typeof(obj2), typeof(obj3));
Все остальное
не проверено и, скорее всего, не
работает
.
Ссылка на EXE (~150 MB)
Скачать EXE из облаков (~150 MB)
Скачать последний билд (~40 MB)
Билд не является самостоятельным приложением!
Устанавливать сначала основной EXE, а ПОСЛЕ этого в ту же папку билд!
Назад ко всем версиям